keough 36 Posted April 19, 2017 Hello! I have this idea to make the pvp active on my server with a twist. Anyone can do this? I am willing to pay PvP Rank - Top 10 per week - The top ten will be rewarded at the end of the week and it will be reset - Every kill in the pvp map gain 3 PvP Point in rank - Every Death in the pvp map will have penalty of -2 points - Once a player kill he will receive a notification which is dispbottom "You gain 3 points on PvP Rank" - Same once a player died in the pvp room dispbottom "You received -2 points penalty on PvP Rank" - The top ten rank at the end of the week will be rewarded a Rok Star Badge - item id 7729 Top 1 - 100 Rok Star Badge Top 2 - 90 Rok Star Badge Top 3 - 80 Rok Star Badge Top 4 - 70 Rok Star Badge Top 5 - 60 Rok Star Badge Top 6 - 50 Rok Star Badge Top 7 - 40 Rok Star Badge Top 8 - 30 Rok Star Badge Top 9 - 20 Rok Star Badge Top 10 - 10 Rok Star Badge - Our client has 2 client maximum or dual client how can we restrict it from getting points? Quote Share this post Link to post Share on other sites
0 meko 170 Posted May 2, 2017 working on it, I'll post here the script asap, free of charge 1 Legend reacted to this Quote Share this post Link to post Share on other sites
0 meko 170 Posted May 2, 2017 (edited) here's a rough draft (not tested) - script PvP Ranking FAKE_NPC,{ OnPCKillEvent: pvp_rank[.this_week] += 3; // raise our own pvp rank dispbottom("You gain 3 points on PvP Rank"); attachrid(killedrid); pvp_rank[.this_week] = max(0, pvp_rank[.this_week] - 3); // decrease their pvp rank dispbottom("You received -3 points penalty on PvP Rank"); end; OnPCLoginEvent: OnClaimReward: .@char = getcharid(CHAR_ID_CHAR); if ($pending_badges[.@char] < 1) { end; } pvp_rank[$last_week] = 0; dispbottom(sprintf("PvP Rank: you obtained %i points this week, putting you at rank %i.", $pending_points[.@char], $pending_rank[.@char] + 1)); dispbottom(sprintf("Reward: %i badges.", $pending_badges[.@char])); getitem(Rok_Star_Badge, $pending_badges[.@char]); $pending_badges[.@char] = 0; $pending_points[.@char] = 0; $pending_rank[.@char] = 0; end; OnInit: .top_len = 10; // we want a top 10 // fallthrough OnSun0001: // every Sunday at 00:01 AM $last_week = .this_week; .this_week = atoi(gettimestr("%y%W", 4)); // YYWW if ($last_week < 1) { end; // this is our first week running this script } .@count = query_sql(sprintf("SELECT c.char_id, c.name, r.value" "FROM `char_reg_num_db` r " "JOIN `char` c ON r.char_id = c.char_id " "WHERE `key`='pvp_rank' AND `index`='%i' " "ORDER BY `value` DESC " "LIMIT " + .top_len + ";", $last_week), .top_char[0], .top_char$[0], .top_points[0]); // store that info so it can be reused throughout the week query_sql(sprintf("DELETE FROM `char_reg_num_db` WHERE `key`='pvp_rank' AND `index` <= %i", $last_week)); // janitor task for (.@i = 0; .@i < .@count; .@i++) { .@badges = (10 * .top_len) - (10 * .@i); // the badges this player won .@char = .top_char[.@i]; .@acc = charid2rid(.@char); $pending_badges[.@char] += .@badges; $pending_points[.@char] = .top_points[.@i]; $pending_rank[.@char] = (.@i + 1); if (.@acc > 0) { addtimer(rand(5000), "PvP Ranking::OnClaimReward", .@acc); } } end; } You'll notice I did +3 and -3 for both killing and being killed; This is on purpose, else someone could just make 2 characters and kill each other to keep getting +1 every time (+3, -2) To display the top 10 from last week in a npc you'd do something like: mes("Here's the ranking for last week:"); next(); if (getvariableofnpc(.top_char[0], "PvP Ranking") < 1) { mes("(no ranking available for that week)"); next(); } .@max = getvariableofnpc(.top_len, "PvP Ranking"); for (.@i = 0; .@i < .@max; .@i++) { .@points = getvariableofnpc(.top_points[.@i], "PvP Ranking"); if (.@points < 1) { break; } mes(sprintf("%i. %s — %i points.", .@i + 1, getvariableofnpc(.top_char$[.@i], "PvP Ranking"), .@points)); next(); } Edited May 2, 2017 by meko 1 Legend reacted to this Quote Share this post Link to post Share on other sites
0 keough 36 Posted May 6, 2017 (edited) @meko I will be testing this on my test server. How about if there is a restriction on dual client users. Edited May 6, 2017 by keough Quote Share this post Link to post Share on other sites
Share this post
Link to post
Share on other sites